跳到主要内容

Golang 读取配置文件之 go-ini 包

Gin 框架不像 SpringBoot 那样打包好了一切工具,它的配置文件也需要自己去读取,所以这里使用第三方的配置项目 go-ini 它还附赠了 官网中文文档

go get -u github.com/go-ini/ini

编写基础的应用配置文件,在 go-gin-example 的 conf 目录下新建 app.ini 文件,写入内容:

#debug or release
RUN_MODE = debug

[app]
PAGE_SIZE = 10
JWT_SECRET = 23347$040412

[server]
HTTP_PORT = 8000
READ_TIMEOUT = 60
WRITE_TIMEOUT = 60

[database]
TYPE = mysql
USER = 数据库账号
PASSWORD = 数据库密码
#127.0.0.1:3306
HOST = 数据库IP:数据库端口号
NAME = blog
TABLE_PREFIX = blog_

用法:就是先用 Cfg.GetSection("server") 取出对应的区域再用 Key-Value 的形式读取具体的值

package setting

import (
"log"
"time"

"github.com/go-ini/ini"
)

var (
Cfg *ini.File

RunMode string

HTTPPort int
ReadTimeout time.Duration
WriteTimeout time.Duration

PageSize int
JwtSecret string
)

func init() {
var err error
Cfg, err = ini.Load("conf/app.ini")
if err != nil {
log.Fatalf("Fail to parse 'conf/app.ini': %v", err)
}

LoadBase()
LoadServer()
LoadApp()
}

func LoadBase() {
RunMode = Cfg.Section("").Key("RUN_MODE").MustString("debug")
}

func LoadServer() {
sec, err := Cfg.GetSection("server")
if err != nil {
log.Fatalf("Fail to get section 'server': %v", err)
}

HTTPPort = sec.Key("HTTP_PORT").MustInt(8000)
ReadTimeout = time.Duration(sec.Key("READ_TIMEOUT").MustInt(60)) * time.Second
WriteTimeout = time.Duration(sec.Key("WRITE_TIMEOUT").MustInt(60)) * time.Second
}

func LoadApp() {
sec, err := Cfg.GetSection("app")
if err != nil {
log.Fatalf("Fail to get section 'app': %v", err)
}

JwtSecret = sec.Key("JWT_SECRET").MustString("!@)*#)!@U#@*!@!)")
PageSize = sec.Key("PAGE_SIZE").MustInt(10)
}